package cn.kgc.spring.dynamic;

import org.springframework.cglib.proxy.Enhancer;
import org.springframework.cglib.proxy.InvocationHandler;

/**
 * @author 课工场
 * @date 2024/4/29
 * @description   基于cglib的代理实现  基于父子类的实现
 */
public class CglibProxy {

    private Object obj;

    public CglibProxy(Object obj){
        this.obj = obj;
    }

    // 通过cglib方式生成代理对象
    public Object  getProxy(){

        Enhancer enhancer = new Enhancer();
        //  设置父类型
        enhancer.setSuperclass(obj.getClass());
        // 封装增强的业务
        InvocationHandler invocationHandler = (o, method, objects) -> {

            Object invoke = method.invoke(obj, objects);

            System.out.println("已经学习了很长时间了，可以休息一下");
            return invoke;

        };
        enhancer.setCallback(invocationHandler);
        Object o = enhancer.create();
        return o;
    }
}
